//
//  SPBaseViewController.h
//  SmartCity
//
//  Created by LSP on 2017/5/12.
//  Copyright © 2017年 NRH. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface SPBaseViewController : UIViewController <UIGestureRecognizerDelegate>

/**
 *  返回上一级控制器。
 */
- (IBAction)backViewController;

/**
 *  推出一个控制器
 *  @param viewController 需要被推出的控制器
 */
- (void)pushViewController:(UIViewController *)viewController;

/**
 *  跳转到登陆界面, 登录成功后调success
 */
- (void)gotoLoginAndSuccessCallback:(void(^)(void))success;

/**
 *  确保登录状态, 如果未登录则跳转至登录界面, 并在登录成功后继续之前的操作.
 *
 *  @param failureContinue 登录成功后继续之前的操作
 *  @return 返回是已否登录
 */
- (BOOL)ensureHadLoginIfFailed:(void(^)(void))failureContinue;
/**
 *  确保在登录状态下执行Block
 *
 *  @param execute 需要执行的操作
 */
- (void)ensureHadLoginExecute:(void (^)(void))execute;

/**
 *  通知某个控制器刷新
 
 @param vcName 需要刷新的控制器的名字
 */
- (void)refreshViewControllerWithName:(NSString *)vcName;
- (void)refreshViewControllerWithName:(NSString *)vcName userinfo:(NSDictionary *)userinfo;

/****************** 以下为子类重载统一入口 ***************** */
/**
 *  子类初始化子视图统一入口（子类重载）。父类自动调用。
 *  子类必需重载，且无需调用[super setupSubviews]。 
 */
- (void)setupSubviews;

/**
 *  子类作数据初始化操作 统一入口（子类重载）。父类自动调用(如已实现才调用)。
 *  子类可不实现（父类未实现）
 */
- (void)initialization;

/**
 *  子类设置导航栏按钮（左、右）统一入口（子类重载）。父类自动调用(如已实现才调用)。
 *  子类可不实现（父类未实现）
 */
- (void)setupNavigationItems;

/**
 *  刷新控制器的数据。供子类重载
 */
- (void)refreshContent:(NSNotification *)notification;

/**
 *  登录成功的通知。供子类重载
 *  @param notification 通知
 */
- (void)loginSuccessNotification:(NSNotification *)notification;

/**
 是否可以连续推出, 默认NO;
 
 子类可重载
 */
- (BOOL)canSerialPush;

/**
 用户退出登录的回调
 */
- (void)userDidLogout;

- (void)callPhone:(NSString *)phone;

@end

OBJC_EXTERN NSString * const SPBaseViewControllerRefreshSourceVCKey;
OBJC_EXTERN NSString * const SPBaseViewControllerRefreshChangedObjectKey;

